/*
 * Copyright (c) 2017. danlu.com Co.Ltd. All rights reserved.
 */

package cn.com.dhc.danlu.dlware.api;

import cn.com.hd.mall.web.webservices.entity.BaseResponse;
import cn.com.hd.mall.web.webservices.entity.freedom.request.base.BaseRequest;
import cn.com.hd.mall.web.webservices.entity.freedom.request.coupon.AchieveCouponReq;
import cn.com.hd.mall.web.webservices.entity.freedom.request.coupon.CheckSeparateOrderListsReq;
import cn.com.hd.mall.web.webservices.entity.freedom.request.coupon.GetActivityListReq;
import cn.com.hd.mall.web.webservices.entity.freedom.request.coupon.GetCouponCntReq;
import cn.com.hd.mall.web.webservices.entity.freedom.request.coupon.GetCouponCntWithDealerReq;
import cn.com.hd.mall.web.webservices.entity.freedom.request.coupon.GetCouponListReq;
import cn.com.hd.mall.web.webservices.entity.freedom.request.coupon.GetCouponListWithDealerReq;
import cn.com.hd.mall.web.webservices.entity.freedom.request.coupon.GetCouponWithMerchReq;
import cn.com.hd.mall.web.webservices.entity.freedom.request.coupon.GetDealerCouponParamReq;
import cn.com.hd.mall.web.webservices.entity.freedom.request.coupon.GetWithMerchReq;
import cn.com.hd.mall.web.webservices.entity.freedom.response.base.BaseResponseWrapper;
import cn.com.hd.mall.web.webservices.entity.freedom.response.coupon.AchieveCouponResponse;
import cn.com.hd.mall.web.webservices.entity.freedom.response.coupon.CheckSeparateOrderListsResponse;
import cn.com.hd.mall.web.webservices.entity.freedom.response.coupon.GetAllCouponCntResponse;
import cn.com.hd.mall.web.webservices.entity.freedom.response.coupon.GetBenefitCntWithMerchResponse;
import cn.com.hd.mall.web.webservices.entity.freedom.response.coupon.GetCouponCntResponse;
import cn.com.hd.mall.web.webservices.entity.freedom.response.coupon.GetCouponCntWithDealerResponse;
import cn.com.hd.mall.web.webservices.entity.freedom.response.coupon.GetCouponListResponse;
import cn.com.hd.mall.web.webservices.entity.freedom.response.coupon.GetCouponListWithDealerResponse;
import cn.com.hd.mall.web.webservices.entity.freedom.response.coupon.GetCouponWithMerchResponse;
import cn.com.hd.mall.web.webservices.entity.freedom.response.coupon.GetDealerCouponParamResponse;
import cn.com.hd.mall.web.webservices.entity.freedom.response.coupon.ObtainDealersCouponList;
import cn.com.hd.mall.web.webservices.entity.request.ForgetPwdValidateSmsCodeRequest;
import cn.com.hd.mall.web.webservices.entity.request.OrderRequest;
import cn.com.hd.mall.web.webservices.entity.request.account.ActivatePhoneRequest;
import cn.com.hd.mall.web.webservices.entity.request.account.ActiveNewPhoneRequest;
import cn.com.hd.mall.web.webservices.entity.request.account.GetAcctInfoRequest;
import cn.com.hd.mall.web.webservices.entity.request.account.GetCompanyInfoRequest;
import cn.com.hd.mall.web.webservices.entity.freedom.request.base.BasePageRequest;
import cn.com.hd.mall.web.webservices.entity.request.common.GetPicValCodeRequest;
import cn.com.hd.mall.web.webservices.entity.request.common.ValidatePhoneRequest;
import cn.com.hd.mall.web.webservices.entity.request.common.ValidatePicValCodeRequest;
import cn.com.hd.mall.web.webservices.entity.request.common.ValidateSmsCodeRequest;
import cn.com.hd.mall.web.webservices.entity.request.common.ValidationBizCodeRequest;
import cn.com.hd.mall.web.webservices.entity.request.envelop.GetCouponListRequest;
import cn.com.hd.mall.web.webservices.entity.request.envelop.GetMyCouponCntRequest;
import cn.com.hd.mall.web.webservices.entity.request.envelop.GetMyCouponListRequest;
import cn.com.hd.mall.web.webservices.entity.request.login.LoginRequest;
import cn.com.hd.mall.web.webservices.entity.request.merch.MerchCategoryListRequest;
import cn.com.hd.mall.web.webservices.entity.request.merch.MerchDetailRequest;
import cn.com.hd.mall.web.webservices.entity.request.merch.MerchListRequest;
import cn.com.hd.mall.web.webservices.entity.request.merch.OftenBuyListRequest;
import cn.com.hd.mall.web.webservices.entity.request.mydl.deliveraddr.AddDeliverAddressRequest;
import cn.com.hd.mall.web.webservices.entity.request.mydl.deliveraddr.DelDeliverAddressReqeust;
import cn.com.hd.mall.web.webservices.entity.request.mydl.deliveraddr.GetTerminalAddressRequest;
import cn.com.hd.mall.web.webservices.entity.request.mydl.deliveraddr.ModifyDeliverAddressRequest;
import cn.com.hd.mall.web.webservices.entity.request.mydl.deliveraddr.SetDefaultDeliverAddressRequest;
import cn.com.hd.mall.web.webservices.entity.request.mydl.favorite.AddFavoriteRequest;
import cn.com.hd.mall.web.webservices.entity.request.mydl.favorite.DelFavoriteRequest;
import cn.com.hd.mall.web.webservices.entity.request.mydl.invoice.AddInvoiceRequest;
import cn.com.hd.mall.web.webservices.entity.request.mydl.invoice.DelInvoiceRequest;
import cn.com.hd.mall.web.webservices.entity.request.mydl.invoice.ModifyInvoiceRequest;
import cn.com.hd.mall.web.webservices.entity.request.mydl.invoice.SetDefaultInvoiceRequest;
import cn.com.hd.mall.web.webservices.entity.request.mydl.password.ModifyPasswordRequest;
import cn.com.hd.mall.web.webservices.entity.request.mydl.password.ResetPwdRequest;
import cn.com.hd.mall.web.webservices.entity.request.mydl.version.AppVersionCompareRequest;
import cn.com.hd.mall.web.webservices.entity.request.oper.OrderOperCancelRequest;
import cn.com.hd.mall.web.webservices.entity.request.oper.OrderOperReceiveRequest;
import cn.com.hd.mall.web.webservices.entity.request.order.CreateQftSDKPaymentOrderRequest;
import cn.com.hd.mall.web.webservices.entity.request.order.GetQftUserInfoRequest;
import cn.com.hd.mall.web.webservices.entity.request.order.GetYijipayConfigRequest;
import cn.com.hd.mall.web.webservices.entity.request.order.OrderDetailRequest;
import cn.com.hd.mall.web.webservices.entity.request.order.OrderListRequest;
import cn.com.hd.mall.web.webservices.entity.request.order.OrderLogRequest;
import cn.com.hd.mall.web.webservices.entity.request.order.OrderMerchSnapshotRequest;
import cn.com.hd.mall.web.webservices.entity.request.order.PaymentResultNotifyRequest;
import cn.com.hd.mall.web.webservices.entity.request.regist.GetAreaRequest;
import cn.com.hd.mall.web.webservices.entity.request.regist.RegistRequest;
import cn.com.hd.mall.web.webservices.entity.request.regist.TerminalRequest;
import cn.com.hd.mall.web.webservices.entity.request.regist.VerificationCodeRequest;
import cn.com.hd.mall.web.webservices.entity.request.shoppingcart.AddShoppingCartRequest;
import cn.com.hd.mall.web.webservices.entity.request.shoppingcart.CreateOrderRequest;
import cn.com.hd.mall.web.webservices.entity.request.shoppingcart.DealerMinDeliveryAmtRequest;
import cn.com.hd.mall.web.webservices.entity.request.shoppingcart.DelShoppingCartRequest;
import cn.com.hd.mall.web.webservices.entity.request.shoppingcart.ModifyShoppingCartCountRequest;
import cn.com.hd.mall.web.webservices.entity.request.shoppingcart.OnChangedPromotionInfoRequest;
import cn.com.hd.mall.web.webservices.entity.request.shoppingcart.PreViewOrderRequest;
import cn.com.hd.mall.web.webservices.entity.response.common.GetBannerListResponse;
import cn.com.hd.mall.web.webservices.entity.response.common.GetCouponParamResponse;
import cn.com.hd.mall.web.webservices.entity.response.common.GetPicValCodeResponse;
import cn.com.hd.mall.web.webservices.entity.response.common.GetTopicListResponse;
import cn.com.hd.mall.web.webservices.entity.response.common.UserAgreementResponse;
import cn.com.hd.mall.web.webservices.entity.response.common.ValidationBizResponse;
import cn.com.hd.mall.web.webservices.entity.response.cpx.GetMyCouponCntResponse;
import cn.com.hd.mall.web.webservices.entity.response.cpx.GetMyCouponListResponse;
import cn.com.hd.mall.web.webservices.entity.response.login.GetValCodeForPswResponse;
import cn.com.hd.mall.web.webservices.entity.response.login.LoginResponse;
import cn.com.hd.mall.web.webservices.entity.response.login.ResetPswResponse;
import cn.com.hd.mall.web.webservices.entity.response.merch.CategoryListResponse;
import cn.com.hd.mall.web.webservices.entity.response.merch.MerchCategoryListResponse;
import cn.com.hd.mall.web.webservices.entity.response.merch.NewMerchDetailResponse;
import cn.com.hd.mall.web.webservices.entity.response.merch.NewMerchListResponse;
import cn.com.hd.mall.web.webservices.entity.response.merch.OftenBuyListResponse;
import cn.com.hd.mall.web.webservices.entity.response.merch.PromotionListResponse;
import cn.com.hd.mall.web.webservices.entity.response.merch.RecommendListResponse;
import cn.com.hd.mall.web.webservices.entity.response.mydl.account.ActivatePhoneResponse;
import cn.com.hd.mall.web.webservices.entity.response.mydl.account.GetAcctInfoResponse;
import cn.com.hd.mall.web.webservices.entity.response.mydl.account.GetCompanyInfoResponse;
import cn.com.hd.mall.web.webservices.entity.response.mydl.account.GetValCodeForActivateResponse;
import cn.com.hd.mall.web.webservices.entity.response.mydl.deliveraddr.DeliverAddressListReponse;
import cn.com.hd.mall.web.webservices.entity.response.mydl.deliveraddr.GetTerminalAddressReponse;
import cn.com.hd.mall.web.webservices.entity.response.mydl.favorite.FavoriteListResponse;
import cn.com.hd.mall.web.webservices.entity.response.mydl.invoice.AddModifyInvoiceResponse;
import cn.com.hd.mall.web.webservices.entity.response.mydl.invoice.InvoiceListResponse;
import cn.com.hd.mall.web.webservices.entity.response.mydl.version.AppVersionCompareResponse;
import cn.com.hd.mall.web.webservices.entity.response.order.GetQftUserInfoResponse;
import cn.com.hd.mall.web.webservices.entity.response.order.GetTradeNoResponse;
import cn.com.hd.mall.web.webservices.entity.response.order.GetYijipayConfigResponse;
import cn.com.hd.mall.web.webservices.entity.response.order.OrderChangeNote;
import cn.com.hd.mall.web.webservices.entity.response.order.OrderCountResponse;
import cn.com.hd.mall.web.webservices.entity.response.order.OrderDetailResponse;
import cn.com.hd.mall.web.webservices.entity.response.order.OrderListResponse;
import cn.com.hd.mall.web.webservices.entity.response.order.OrderLogResponse;
import cn.com.hd.mall.web.webservices.entity.response.order.OrderMerchSnapshotResponse;
import cn.com.hd.mall.web.webservices.entity.response.regist.AreaResponse;
import cn.com.hd.mall.web.webservices.entity.response.regist.RegistResponse;
import cn.com.hd.mall.web.webservices.entity.response.regist.ShopTypeListResponse;
import cn.com.hd.mall.web.webservices.entity.response.regist.TerminalInformationModifyResponse;
import cn.com.hd.mall.web.webservices.entity.response.regist.TerminalRegistProgressResponse;
import cn.com.hd.mall.web.webservices.entity.response.shoppingcart.AddShoppingcartResponse;
import cn.com.hd.mall.web.webservices.entity.response.shoppingcart.CheckSwitchResponse;
import cn.com.hd.mall.web.webservices.entity.response.shoppingcart.CreateOrderByShoppingcartNewResponse;
import cn.com.hd.mall.web.webservices.entity.response.shoppingcart.DealerMinDeliveryAmtResponse;
import cn.com.hd.mall.web.webservices.entity.response.shoppingcart.ModifyShoppingCartCountResponse;
import cn.com.hd.mall.web.webservices.entity.response.shoppingcart.OnChangedPromotionInfoResponse;
import cn.com.hd.mall.web.webservices.entity.response.shoppingcart.PreViewOrderResponse;
import cn.com.hd.mall.web.webservices.entity.response.shoppingcart.ShoppingCartSizeResponse;
import cn.com.hd.mall.web.webservices.entity.response.shoppingcart.ToShoppingcartResponse;
import cn.com.hd.mall.web.webservices.entity.utils.DanluConstants;
import retrofit2.http.Body;
import retrofit2.http.POST;
import rx.Observable;

/**
 * author: 吴海洋(<a href="mailto:wuhaiyang@danlu.com">wuhaiyang@danlu.com</a>)<br/>
 * author: 李一方(<a href="mailto:liyifang@danlu.com">liyifang@danlu.com</a>)<br/>
 * version: 1.5.0<br/>
 * since: 2016-09-18 21:55<br/>
 * <p>
 * <p>
 * Danlu Network API. 另：使用FormUrlEncoded提交Json 数据至服务器测试失败，版本OKHttp 2.6 请勿再试 lyf
 * </p>
 */
public interface DanluApi {
    /************************************************************************************/
    /****************************** 潘多拉 红包优惠券 api接口 ******************************/
    /************************************************************************************/
    /**
     * 查看拆分订单
     *
     * @param req
     *         被拆分的主订单号
     *
     * @return 拆分后的支付单
     */
    @POST("orders/getSeparateOrderList.json")
    Observable<BaseResponseWrapper<CheckSeparateOrderListsResponse>> getOrderSplitList(@Body CheckSeparateOrderListsReq req);

    /**
     * 领券 & 抢红包
     *
     * @param req
     *         token & 红包||经销商主键 组成的请求参数封装
     *
     * @return 是否领取成功与对应ID 及金额
     */
    @POST("dealerCoupon/achieveCoupon.json")
    Observable<BaseResponseWrapper<AchieveCouponResponse>> achieveCoupon(@Body AchieveCouponReq req);

    /**
     * 领券中心/抢经销商红包：可参与的活动列表(筛选条件)
     *
     * @param req
     *         可参与活动的筛选请求参数封装
     *
     * @return 可参与的活动列表
     */
    @POST("dealerCoupon/getActivityList.json")
    Observable<BaseResponseWrapper<ObtainDealersCouponList>> getActivityList(@Body GetActivityListReq req);

    /**
     * 获取我的经销商优惠券/红包 列表
     *
     * @param req
     *         token & 使用状态 & 票券类型 & 分页参数 组成的请求参数封装
     *
     * @return 经销商优惠券/红包 列表
     */
    @POST("dealerCoupon/getCouponList.json")
    Observable<BaseResponseWrapper<GetCouponListResponse>> getCouponList(@Body GetCouponListReq req);

    /**
     * 获取我的经销商优惠劵/红包 数量
     *
     * @param req
     *         token & 票券类型 组成的请求参数封装
     *
     * @return 票券的已使用、未使用、已过期的数量
     */
    @POST("dealerCoupon/getCouponCnt.json")
    Observable<BaseResponseWrapper<GetCouponCntResponse>> getCouponCnt(@Body GetCouponCntReq req);

    /**
     * 提交订单页 - 获取经销商红包列表（包括：可用红包，不可用红包）
     *
     * @param req
     *         token & 经销商ID & 订单中该经销商下所有商品总额(扣除满减满赠后) 组成的请求参数封装
     *
     * @return 经销商红包列表
     */
    @POST("dealerCoupon/getCouponListWithDealer.json")
    Observable<BaseResponseWrapper<GetCouponListWithDealerResponse>> getCouponListWithDealer(@Body GetCouponListWithDealerReq req);

    /**
     * 我的丹露页获取丹露红包、经销商红包、经销商优惠券数量
     *
     * @param req
     *         token 组成的请求参数封装
     *
     * @return 丹露红包张数、经销商红包张数、经销商优惠券张数
     */
    @POST("dealerCoupon/getAllCouponCnt.json")
    Observable<BaseResponseWrapper<GetAllCouponCntResponse>> getAllCouponCnt(@Body BaseRequest req);

    /**
     * 商品详情：可领优惠券列表(与商品相关)
     *
     * @param req
     *         token & 商品ID 组成的请求参数封装
     *
     * @return 优惠券活动列表
     */
    @POST("dealerBenefit/getActivityListWithMerch.json")
    Observable<BaseResponseWrapper<ObtainDealersCouponList>> getActivityListWithMerch(@Body GetWithMerchReq req);

    /**
     * 商品详情：可领优惠券个数(与商品绑定)
     *
     * @param req
     *         token & 商品ID 组成的请求参数封装
     *
     * @return 可领优惠券个数
     */
    @POST("dealerBenefit/getBenefitCntWithMerch.json")
    Observable<BaseResponseWrapper<GetBenefitCntWithMerchResponse>> getBenefitCntWithMerch(@Body GetWithMerchReq req);

    /**
     * 获取经销商相关参数
     *
     * @param request
     *         token & 经销商ID 列表组 成的的请求参数封装
     *
     * @return 每一个经销商的ID 和对应的最高优惠比
     */
    @POST("common/param/getDealerCouponParam.json")
    Observable<BaseResponseWrapper<GetDealerCouponParamResponse>> getDealerCouponParam(@Body GetDealerCouponParamReq request);

    /**
     * 提交订单页 - 获取商品优惠券
     *
     * @param request
     *         token & 商品ID列表 组成的请求参数封装
     *
     * @return 每一个商品 ID 对应的优惠券组成的列表
     */
    @POST("dealerBenefit/getCouponWithMerch.json")
    Observable<BaseResponseWrapper<GetCouponWithMerchResponse>> getCouponWithMerch(@Body GetCouponWithMerchReq request);

    /**
     * 提交订单页获 - 取经销商可使用红包数量
     *
     * @param request
     *         token & 经销商ID &  订单中该经销商下所有商品总额(扣除满减满赠后) 组成的请求参数封装
     *
     * @return 每个经销商可用的红包数量
     */
    @POST("dealerCoupon/getCouponCntWithDealer.json")
    Observable<BaseResponseWrapper<GetCouponCntWithDealerResponse>> getCouponCntWithDealer(@Body GetCouponCntWithDealerReq request);

    /**************************************************************************************/
    /****************************** 潘多拉 联动优势支付 api接口 ******************************/
    /**************************************************************************************/
    /**
     * 通用获取图片验证码接口
     */
    @POST(DanluConstants.Service.GET_PIC_VALCODE)
    Observable<BaseResponseWrapper<GetPicValCodeResponse>> getPicValCode(@Body GetPicValCodeRequest request);

    /**
     * 通用校验图形验证码
     */
    @POST(DanluConstants.Service.VALIDATE_PIC_CODE)
    Observable<BaseResponseWrapper<BaseResponse>> validatePicValCode(@Body ValidatePicValCodeRequest request);


    /**************************************** add by lyf 2016-11-14 14:17:18 ****************************************/
    /**
     * 校验短信验证码
     */
    @POST(DanluConstants.Service.VALIDATE_SMS_CODE)
    Observable<BaseResponseWrapper<BaseResponse>> validateMsgValCode(@Body ValidateSmsCodeRequest request);
    /**************************************************************************************/
    /************************************* 易极付接口 **************************************/
    /**************************************************************************************/
    /**
     * 获取易极付常量
     */
    @POST(DanluConstants.Service.GET_YJF_CONFIG)
    Observable<BaseResponseWrapper<GetYijipayConfigResponse>> getYifConfigConstants(@Body GetYijipayConfigRequest request);

    /**
     * 接口获取易极付交易号
     */
    @POST(DanluConstants.Service.GET_PEYMENT_NO)
    Observable<BaseResponseWrapper<GetTradeNoResponse>> createDealNumber(@Body CreateQftSDKPaymentOrderRequest request);

    /**
     * 获取买家易极付账户信息
     */
    @POST(DanluConstants.Service.GET_YJF_USER_INFO)
    Observable<BaseResponseWrapper<GetQftUserInfoResponse>> getYifUserInfo(@Body GetQftUserInfoRequest request);

    /**
     * 通知交易结果
     */
    @POST(DanluConstants.Service.NOTIFY_PEYMENT_STATUS)
    Observable<BaseResponseWrapper<BaseResponse>> paymentResultNotify(@Body PaymentResultNotifyRequest request);

    /**************************************************************************************/
    /************************************* 旧接口迁移 **************************************/
    /**************************************************************************************/

    /**
     * 接口 1：登录
     */
    @POST(DanluConstants.Service.LOGIN_JSON)
    Observable<BaseResponseWrapper<LoginResponse>> login(@Body LoginRequest request);

    /**
     * 接口 2：接口获取版本号
     */
    @POST(DanluConstants.Service.VERSION)
    Observable<BaseResponseWrapper<AppVersionCompareResponse>> getVersion(@Body AppVersionCompareRequest request);

    /**
     * 接口 7：获取商品列表
     */
    @POST(DanluConstants.Service.GET_MERCHANDISES_NEW_LIST_JSON)
    Observable<BaseResponseWrapper<NewMerchListResponse>> getMerchandisesList(@Body MerchListRequest request);

    /**
     * 接口 12：修改密码
     */
    @POST(DanluConstants.Service.MODIFY_PASSWORD_JSON)
    Observable<BaseResponseWrapper<BaseResponse>> modifyPassword(@Body ModifyPasswordRequest request);

    /**
     * 接口 18：获取确认订单信息
     */
    @POST(DanluConstants.Service.GET_PRE_VIEW_ORDER_BY_SHOPPING_CART_JSON)
    Observable<BaseResponseWrapper<PreViewOrderResponse>> getPreViewOrderByShoppingCart(@Body PreViewOrderRequest request);

    /**
     * 接口 19：从购物车生成新订单
     */
    @POST(DanluConstants.Service.CREATE_ORDER_BY_SHOPPING_CART_JSON)
    Observable<BaseResponseWrapper<CreateOrderByShoppingcartNewResponse>> createOrderByShoppingCart(@Body CreateOrderRequest request);

    /**
     * 接口 26：确认收货
     */
    @POST(DanluConstants.Service.CONFIRM_DELIVERY_JSON)
    Observable<BaseResponseWrapper<BaseResponse>> confirmDeliveryFinish(@Body OrderRequest request);

    /**
     * 接口 41：获取购物车中的商品信息(新)
     */
    @POST(DanluConstants.Service.TO_SHOPPING_CART_JSON)
    Observable<BaseResponseWrapper<ToShoppingcartResponse>> toShoppingCart(@Body BaseRequest request);

    /**
     * 接口 42：获取茶品牌列表
     */
    @POST(DanluConstants.Service.GET_TEA_BRAND_LIST_JSON)
    Observable<BaseResponseWrapper<MerchCategoryListResponse>> getTeaBrandList(@Body MerchCategoryListRequest request);

    /**
     * 接口 43：获取商品详情
     */
    @POST(DanluConstants.Service.GET_MERCHANDISES_DETAIL_JSON_NEW)
    Observable<BaseResponseWrapper<NewMerchDetailResponse>> getMerchandisesDetail(@Body MerchDetailRequest request);

    /**
     * 接口 44：添加商品到购物车
     */
    @POST(DanluConstants.Service.ADD_SHOPPING_CART_JSON_NEW)
    Observable<BaseResponseWrapper<AddShoppingcartResponse>> addShoppingCartNew(@Body AddShoppingCartRequest request);

    /**
     * 接口 45：获取购物车商品数量
     */
    @POST(DanluConstants.Service.GET_SHOPPING_CART_COUNT)
    Observable<BaseResponseWrapper<ShoppingCartSizeResponse>> getShoppingCartCount(@Body BaseRequest request);

    /**
     * 接口 46：修改指定商品在购物车中的数量
     */
    @POST(DanluConstants.Service.MODIFY_SHOPPING_CART_COUNT_JSON)
    Observable<BaseResponseWrapper<ModifyShoppingCartCountResponse>> modifyShoppingCartCount(@Body ModifyShoppingCartCountRequest request);

    /**
     * 接口 48：收获地址列表
     */
    @POST(DanluConstants.Service.GET_DELIVERY_ADDRESS_LIST)
    Observable<BaseResponseWrapper<DeliverAddressListReponse>> getDeliveryAddressList(@Body BaseRequest request);

    /**
     * 接口 47：删除购物车中的商品信息
     */
    @POST(DanluConstants.Service.DEL_SHOPPING_CART_BY_PRODUCT_ID_JSON)
    Observable<BaseResponseWrapper<BaseResponse>> delShoppingCartByProductId(@Body DelShoppingCartRequest request);

    /**
     * 接口 48：发票列表
     */
    @POST(DanluConstants.Service.GET_INVOICE_LIST)
    Observable<BaseResponseWrapper<InvoiceListResponse>> getInvoiceList(@Body BaseRequest request);

    /**
     * 接口 ：设置默认收货地址
     */
    @POST(DanluConstants.Service.SET_DEFAULT_DELIVERY_ADDRESS)
    Observable<BaseResponseWrapper<BaseResponse>> setDefaultDeliverAddress(@Body SetDefaultDeliverAddressRequest request);

    /**
     * 接口 ：添加收货地址
     */
    @POST(DanluConstants.Service.ADD_DELIVERY_ADDRESS)
    Observable<BaseResponseWrapper<BaseResponse>> addDeliverAddress(@Body AddDeliverAddressRequest request);

    /**
     * 接口 ：删除收货地址
     */
    @POST(DanluConstants.Service.DELETE_DELIVERY_ADDRESS)
    Observable<BaseResponseWrapper<BaseResponse>> delDeliverAddress(@Body DelDeliverAddressReqeust request);

    /**
     * 接口 ：修改收货地址
     */
    @POST(DanluConstants.Service.MODIFY_DELIVERY_ADDRESS)
    Observable<BaseResponseWrapper<BaseResponse>> modifyDeliverAddress(@Body ModifyDeliverAddressRequest request);

    /**
     * 接口 ：获取所有区域列表
     */
    @POST(DanluConstants.Service.GET_AREA_LIST)
    Observable<BaseResponseWrapper<AreaResponse>> getAreaList(@Body GetAreaRequest request);

    /**
     * 接口 ：添加发票
     */
    @POST(DanluConstants.Service.ADD_INVOICE)
    Observable<BaseResponseWrapper<AddModifyInvoiceResponse>> addInvoice(@Body AddInvoiceRequest request);

    /**
     * 接口 ：修改发票
     */
    @POST(DanluConstants.Service.MODIFY_INVOICE)
    Observable<BaseResponseWrapper<AddModifyInvoiceResponse>> modifyInvoice(@Body ModifyInvoiceRequest request);

    /**
     * 接口 ：删除发票
     */
    @POST(DanluConstants.Service.DEL_INVOICE)
    Observable<BaseResponseWrapper<BaseResponse>> delInvoice(@Body DelInvoiceRequest request);

    /**
     * 接口 ：设为默认发票
     */
    @POST(DanluConstants.Service.SET_DEFAU_NORAML_INVOICE)
    Observable<BaseResponseWrapper<BaseResponse>> setDefauInvoice(@Body SetDefaultInvoiceRequest request);

    /**
     * 接口 ：获取收藏列表, PS:貌似存有分页加载，需要注意
     */
    @POST(DanluConstants.Service.GET_FAVOURITE_LIST)
    Observable<BaseResponseWrapper<FavoriteListResponse>> getFavouriteList(@Body BasePageRequest request);

    /**
     * 接口 50：增加收藏
     */
    @POST(DanluConstants.Service.ADD_FAVOURITE)
    Observable<BaseResponseWrapper<BaseResponse>> addFavourite(@Body AddFavoriteRequest request);

    /**
     * 接口 51：删除收藏
     */
    @POST(DanluConstants.Service.DEL_FAVOURITE)
    Observable<BaseResponseWrapper<BaseResponse>> delFavourite(@Body DelFavoriteRequest request);

    /**
     * 接口 54：获取订单数量
     */
    @POST(DanluConstants.Service.GET_BUYER_ORDER_COUNT)
    Observable<BaseResponseWrapper<OrderCountResponse>> getTerminalOrderCount(@Body BaseRequest request);

    /**
     * 接口 55：获取订单列表
     */
    @POST(DanluConstants.Service.GET_ORDER_LIST)
    Observable<BaseResponseWrapper<OrderListResponse>> getTerminalOrderList(@Body OrderListRequest request);

    /**
     * 接口 56：获取订单详情
     */
    @POST(DanluConstants.Service.GET_ORDER_DETAIL)
    Observable<BaseResponseWrapper<OrderDetailResponse>> getTerminalOrderDetail(@Body OrderDetailRequest request);

    /**
     * 接口 57：更新选择促销的新信息
     */
    @POST(DanluConstants.Service.GET_CHANGED_PROMOTION)
    Observable<BaseResponseWrapper<OnChangedPromotionInfoResponse>> getOnChangedPromotionInfo(@Body OnChangedPromotionInfoRequest request);

    /**
     * 接口 58：取消订单
     */
    @POST(DanluConstants.Service.ORDER_DEAL_CANCLE)
    Observable<BaseResponseWrapper<BaseResponse>> orderDealCancle(@Body OrderOperCancelRequest request);

    /**
     * 接口 59: 确认收货
     */
    @POST(DanluConstants.Service.ORDER_RECEIVE)
    Observable<BaseResponseWrapper<BaseResponse>> orderReceive(@Body OrderOperReceiveRequest request);

    /**
     * 接口 ：获取店铺类型
     */
    @POST(DanluConstants.Service.GET_STORE_TYPE)
    Observable<BaseResponseWrapper<ShopTypeListResponse>> getStoreTypeList(@Body BaseRequest request);

    /**
     * 接口 提交注册
     */
    @POST(DanluConstants.Service.GET_REGISTER_SUBMIT)
    Observable<BaseResponseWrapper<RegistResponse>> registerSubmit(@Body RegistRequest request);

    /**
     * 接口 获取终端店所在地
     */
    @POST(DanluConstants.Service.GET_STORE_ADD)
    Observable<BaseResponseWrapper<GetTerminalAddressReponse>> getStoreAddress(@Body GetTerminalAddressRequest request);

    /**
     * 接口 发送验证码
     */
    @POST(DanluConstants.Service.SEND_VERIFY_CODE)
    Observable<BaseResponseWrapper<BaseResponse>> sendValidateCode(@Body VerificationCodeRequest request);

    /**
     * 接口 商品快照
     */
    @POST(DanluConstants.Service.ORDER_SNAP_SHOT)
    Observable<BaseResponseWrapper<OrderMerchSnapshotResponse>> getSnapShot(@Body OrderMerchSnapshotRequest request);

    /**
     * 忘记密码 获取短信验证码
     */
    @POST(DanluConstants.Service.GET_FORGETPWD_SMSCODE)
    Observable<BaseResponseWrapper<GetValCodeForPswResponse>> forgetPwdGetSmsCode(@Body VerificationCodeRequest request);

    /**
     * 重新设置密码
     */
    @POST(DanluConstants.Service.RESET_PWD)
    Observable<BaseResponseWrapper<ResetPswResponse>> resetPwd(@Body ResetPwdRequest request);

    /**
     * 忘记密码校验短信验证码
     */
    @POST(DanluConstants.Service.FORGETPWD_VALIDATE_SMSCODE)
    Observable<BaseResponseWrapper<BaseResponse>> validateSmsCodeInForgetPwd(@Body ForgetPwdValidateSmsCodeRequest request);

    /**
     * 获取平台参数
     */
    @POST(DanluConstants.Service.GET_COUPONPARAM)
    Observable<BaseResponseWrapper<GetCouponParamResponse>> getEnvelopParam(@Body BaseRequest request);

    /**
     * 获取红包数目
     */
    @POST(DanluConstants.Service.GET_MYCOUPONCOUNT)
    Observable<BaseResponseWrapper<GetMyCouponCntResponse>> getEnvelopCount(@Body GetMyCouponCntRequest request);

    /**
     * 获取可用和不可用优惠券列表
     */
    @POST(DanluConstants.Service.GET_ENVELOPLIST)
    Observable<BaseResponseWrapper<cn.com.hd.mall.web.webservices.entity.response.cpx.GetCouponListResponse>> getCouponList(@Body GetCouponListRequest request);

    /**
     * 获取优惠劵列表（个人中心：未使用，已过期，已使用）
     */
    @POST(DanluConstants.Service.GET_MYCOUPONLIST)
    Observable<BaseResponseWrapper<GetMyCouponListResponse>> getMyEnvelopList(@Body GetMyCouponListRequest request);

    /**
     * 获取订单跟踪消息
     */
    @POST(DanluConstants.Service.GET_ORDER_TRACK)
    Observable<BaseResponseWrapper<OrderLogResponse>> getOrderTrackLog(@Body OrderLogRequest request);

    /**
     * 获取激活手机号的短信验证码
     */
    @POST(DanluConstants.Service.GET_SMSCODE_ACTIVEPHONE)
    Observable<BaseResponseWrapper<GetValCodeForActivateResponse>> getSmsCodeActivePhone(@Body VerificationCodeRequest request);

    /**
     * 获取解绑手机号的短信验证码
     */
    @POST(DanluConstants.Service.GET_SMSCODE_FOR_UNBINDPHONE)
    Observable<BaseResponseWrapper<BaseResponse>> getSmsCodeUnbindPhone(@Body VerificationCodeRequest request);

    /**
     * 绑定手机号的短信验证码
     */
    @POST(DanluConstants.Service.GET_SMSCODE_FOR_BINDPHONE)
    Observable<BaseResponseWrapper<BaseResponse>> getSmsCodeBindPhone(@Body VerificationCodeRequest request);

    /**
     * 获取红包支付的短信校验码             （需检测接口是否正确）
     */
    @POST(DanluConstants.Service.GET_SMSCODE_FOR_ENVELOP)
    Observable<BaseResponseWrapper<BaseResponse>> getSmsCodeEnvelop(@Body VerificationCodeRequest request);


    /**
     * 获取账户基本信息
     */
    @POST(DanluConstants.Service.GET_ACCOUNT_INFO)
    Observable<BaseResponseWrapper<GetAcctInfoResponse>> getUserAccountInfo(@Body GetAcctInfoRequest request);

    /**
     * 激活手机号
     */
    @POST(DanluConstants.Service.ACTIVE_PHONE)
    Observable<BaseResponseWrapper<ActivatePhoneResponse>> activePhone(@Body ActivatePhoneRequest request);

    /**
     * 激活新手机号（更换手机）
     */
    @POST(DanluConstants.Service.ACTIVE_NEW_PHONE)
    Observable<BaseResponseWrapper<BaseResponse>> activeNewPhone(@Body ActiveNewPhoneRequest request);

    /**
     * 获取当前账户企业信息
     */
    @POST(DanluConstants.Service.GET_COMPANY_INFO)
    Observable<BaseResponseWrapper<GetCompanyInfoResponse>> getCompanyInfo(@Body GetCompanyInfoRequest request);

    /**
     * 获取品种类型
     */
    @POST(DanluConstants.Service.GET_TOPIC_LIST)
    Observable<BaseResponseWrapper<GetTopicListResponse>> getTopicList(@Body BaseRequest request);

    /**
     * 获取banner地址
     */
    @POST(DanluConstants.Service.GET_BANNER_LIST)
    Observable<BaseResponseWrapper<GetBannerListResponse>> getBannerList(@Body BaseRequest request);

    /**
     * 终端店注册查看审批进度
     */
    @POST(DanluConstants.Service.GET_TERMINAL_PROGESS)
    Observable<BaseResponseWrapper<TerminalRegistProgressResponse>> registerProgress(@Body LoginRequest request);

    /**
     * 终端店注册资料修改再注册
     */
    @POST(DanluConstants.Service.MODIFY_TERMINAL_INFO)
    Observable<BaseResponseWrapper<TerminalInformationModifyResponse>> modifyTerminalInfo(@Body TerminalRequest request);

    /**
     * 获取常购商品列表
     */
    @POST(DanluConstants.Service.OFTENBUY_LIST)
    Observable<BaseResponseWrapper<OftenBuyListResponse>> getOftenBuyList(@Body OftenBuyListRequest request);

    /**
     * 获取促销商品列表
     */
    @POST(DanluConstants.Service.PROMOTION_LIST)
    Observable<BaseResponseWrapper<PromotionListResponse>> getPromotionList(@Body BasePageRequest reques);

    /**
     * 获取推荐商品列表
     */
    @POST(DanluConstants.Service.RECOMMEND_LIST)
    Observable<BaseResponseWrapper<RecommendListResponse>> getRecommendList(@Body BasePageRequest request);

    /**
     * 注册 - 获取用户协议书
     */
    @POST(DanluConstants.Service.GET_PROTOCAL)
    Observable<BaseResponseWrapper<UserAgreementResponse>> getAgreement(@Body BaseRequest request);

    /**
     * 大额红包支付校验
     */
    @POST(DanluConstants.Service.CHECK_SWITCH)
    Observable<BaseResponseWrapper<CheckSwitchResponse>> checkIsSwitch(@Body BaseRequest request);

    /**
     * 获取所有品类
     */
    @POST(DanluConstants.Service.GET_ALL_CATEGORY)
    Observable<BaseResponseWrapper<CategoryListResponse>> getAllCategory(@Body BaseRequest request);

    /**
     * 获取经销商最小配送金额
     */
    @POST(DanluConstants.Service.DEALER_MIN_DELIVERY_AMT)
    Observable<BaseResponseWrapper<DealerMinDeliveryAmtResponse>> getDealerMinDeliveryAmt(@Body DealerMinDeliveryAmtRequest request);

    /**
     * 查看订单改价备注
     */
    @POST("orders/getOrderChangePriceCommentInfo.json")
    Observable<BaseResponseWrapper<OrderChangeNote>> getOrderChangePriceCommentInfo(@Body OrderLogRequest body);

    /**
     * 注册增加语音验证码
     **/
    @POST("common/msg/sendMessageCode.json")
    Observable<BaseResponseWrapper<ValidationBizResponse>> sendMessageCode(@Body ValidationBizCodeRequest body);

    /**
     * 注册增加语音验证码
     */
    @POST("common/msg/sendVoiceCode.json")
    Observable<BaseResponseWrapper<ValidationBizResponse>> sendVoiceCode(@Body ValidationBizCodeRequest body);

    /**
     * 验证手机号接口
     * @param body
     * @return
     */
    @POST("common/msg/validatePhone.json")
    Observable<BaseResponseWrapper<BaseResponse>> validatePhone(@Body ValidatePhoneRequest body);


}
